package bolao.view;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.List;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;

import org.swingBean.descriptor.GenericFieldDescriptor;
import org.swingBean.descriptor.XMLDescriptorFactory;
import org.swingBean.gui.JBeanPanel;

import bolao.entities.Aposta;
import bolao.entities.ApostaJogosBrasil;
import bolao.entities.Jogo;
import bolao.entities.Resultado;
import bolao.persistence.ApostaDAOPostgre;
import bolao.persistence.JogoDAO;

public class EntradaResultados extends TelaSalvarCancelar implements Janela{
	
	private Aposta controle;
	private JBeanPanel<ApostaJogosBrasil> jogosBrasilForm;
	
	public void abrir() throws IOException, ClassNotFoundException{

		//Cria a janela
		janela = new JFrame("Entrada de Resultados");
		janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		janela.setSize(600,400);
		janela.setLayout(new BoxLayout(janela.getContentPane(),BoxLayout.Y_AXIS));

		//Cria a tabela de jogos		
		JScrollPane scroll = new JScrollPane(criaJogos());
		janela.getContentPane().add(scroll, BorderLayout.CENTER);
		
		//Cria Jogos do Brasil
		GenericFieldDescriptor descriptorJogosBrasil = XMLDescriptorFactory
		.getFieldDescriptor(
				ApostaJogosBrasil.class,
				"bolao/view/jogosBrasil.xml", "ApostaJogosBrasilForm");
		jogosBrasilForm = new JBeanPanel<ApostaJogosBrasil>(ApostaJogosBrasil.class, descriptorJogosBrasil);
		jogosBrasilForm.setBean(controle.getJogosBrasil());
		janela.getContentPane().add(jogosBrasilForm, BorderLayout.CENTER);
		
		//Cria botoes
		JPanel botoes = criaBotoes();
		janela.getContentPane().add(botoes, BorderLayout.SOUTH);
		
		janela.setVisible(true);

	}
	
	private JPanel criaJogos() throws IOException, ClassNotFoundException{
		JPanel jogos = new JPanel();
		jogos.setLayout(new BoxLayout(jogos, BoxLayout.Y_AXIS));
		jogos.setBorder(BorderFactory.createTitledBorder("Jogos"));
		List<Jogo> listaJogos = new JogoDAO().recuperaJogos();
		ApostaDAOPostgre dao = new ApostaDAOPostgre();
		controle = new Aposta();
		controle.setId(ApostaDAOPostgre.apostaControleId);
		controle = dao.getById(controle);
		controle = dao.getResultados(controle);
		final List<Resultado> listaResultado = controle.getResultados();

		for(int i = 0; i< 48; i++){
			ButtonGroup group = new ButtonGroup();
			JPanel confronto = new JPanel();
			confronto.setLayout(new GridLayout(1,4));
			Color background = Color.LIGHT_GRAY;
			if(i%3 == 0)
				background = Color.LIGHT_GRAY;
			if(i%3 == 1)
				background = Color.YELLOW;
			if(i%3 == 2)
				background = Color.CYAN;	
			
			JRadioButton b1 = new JRadioButton(listaJogos.get(i).getTime1(), 
					(listaResultado.get(i).getResultado() == 0));
			b1.addActionListener(new EscolhaResultado(i){
				public void actionPerformed(ActionEvent e) {
					listaResultado.get(index).setResultado(0);					
				}				
			});
			JRadioButton b2 = new JRadioButton("X", 
					(listaResultado.get(i).getResultado() == 1));
			b2.addActionListener(new EscolhaResultado(i){
				public void actionPerformed(ActionEvent e) {
					listaResultado.get(index).setResultado(1);					
				}				
			});
			JRadioButton b3 = new JRadioButton(listaJogos.get(i).getTime2(), 
					(listaResultado.get(i).getResultado() == 2));
			b3.addActionListener(new EscolhaResultado(i){
				public void actionPerformed(ActionEvent e) {
					listaResultado.get(index).setResultado(2);					
				}				
			});
			JRadioButton b4 = new JRadioButton("Nao ocorreu", 
					(listaResultado.get(i).getResultado() == -1));
			b4.addActionListener(new EscolhaResultado(i){
				public void actionPerformed(ActionEvent e) {
					listaResultado.get(index).setResultado(-1);					
				}				
			});
			b1.setBackground(background);
			b2.setBackground(background);
			b3.setBackground(background);
			b4.setBackground(background);
			group.add(b1);
			group.add(b2);
			group.add(b3);
			group.add(b4);
			confronto.add(b1);
			confronto.add(b2);
			confronto.add(b3);
			confronto.add(b4);
			jogos.add(confronto);
		}
		
		return jogos;
	}
	
	private abstract class EscolhaResultado implements ActionListener{

		protected int index;

		public EscolhaResultado(int i){
			this.index = i;
		}

	}

	@Override
	protected int salvar() {
		jogosBrasilForm.populateBean(controle.getJogosBrasil());
		ApostaDAOPostgre dao = new ApostaDAOPostgre();
		dao.update(controle);	
		janela.dispose();
		return 0;
	}

}
